home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-03
/
qbasicpg.zip
/
TYPE_EX.BAS
< prev
next >
Wrap
BASIC Source File
|
1988-09-17
|
2KB
|
77 lines
'
' *** TYPE_EX.BAS -- TYPE statement programming example
'
TYPE Card
Value AS INTEGER
Suit AS STRING*9
END TYPE
DEFINT A-Z
' Define the Deck as a 52-element array of Cards.
DIM Deck(1 TO 52) AS Card
' Build, shuffle, and deal the top five cards.
CALL BuildDeck(Deck())
CALL Shuffle(Deck())
FOR I%=1 TO 5
CALL ShowCard(Deck(I%))
NEXT I%
' Build the deck--fill the array of Cards with
' appropriate values.
SUB BuildDeck(Deck(1) AS Card) STATIC
DIM Suits(4) AS STRING*9
Suits(1)="Hearts"
Suits(2)="Clubs"
Suits(3)="Diamonds"
Suits(4)="Spades"
' This loop controls the suit.
FOR I%=1 TO 4
' This loop controls the face value.
FOR J%=1 TO 13
' Figure out which card (1...52) you're creating.
CardNum%=J%+(I%-1)*13
' Place the face value and suit into the Card.
Deck(CardNum%).Value=J%
Deck(CardNum%).Suit=Suits(I%)
NEXT J%
NEXT I%
END SUB
' Shuffle a deck (an array containing Card elements).
SUB Shuffle(Deck(1) AS Card) STATIC
RANDOMIZE TIMER
' Shuffle by transposing 1000 randomly selected pairs of cards.
FOR I%=1 TO 1000
CardOne%=INT(52*RND+1)
CardTwo%=INT(52*RND+1)
' Notice that SWAP works on arrays of user types.
SWAP Deck(CardOne%),Deck(CardTwo%)
NEXT I%
END SUB
' Display a single card by converting and printing the
' face value and the suit.
SUB ShowCard (SingleCard AS Card) STATIC
SELECT CASE SingleCard.Value
CASE 13
PRINT "King ";
CASE 12
PRINT "Queen";
CASE 11
PRINT "Jack ";
CASE 1
PRINT "Ace ";
CASE ELSE
PRINT USING " ## ";SingleCard.Value;
END SELECT
PRINT " ";SingleCard.Suit
END SUB